import { fileURLToPath, URL } from 'node:url'
import { cwd } from 'node:process'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import VueDevTools from 'vite-plugin-vue-devtools'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  const env = loadEnv(mode, cwd(), '')
  const {
    VITE_BASE_URL,
    VITE_APP_BASE_API,
    VITE_DROP_CONSOLE,
    VITE_PUBLIC_PATH,
    VITE_APP_PROJECT_NAME
  } = env
  return {
    plugins: [vue(), vueJsx(), VueDevTools()],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    /**
     * You will need to set publicPath if you plan to deploy your site under a sub path,
     * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
     * then publicPath should be set to "/bar/".
     * In most cases please use '/' !!!
     * Detail: https://cli.vuejs.org/config/#publicpath
     * 配置二级域名 publicPath should be set to "/bar/"
     */
    base: VITE_PUBLIC_PATH, // 等同于webpack的 publicPath
    build: {
      // 默认值为Vite特殊值'modules',另一个特殊的值是'esnext'-仅执行最少的跨语言转换（用于最小化兼容性），并假定支持本机动态导入。
      target: 'modules',
      // 是否自动注入动态导入的polyfill。
      polyfillDynamicImport: true,
      // 指定输出目录
      outDir: VITE_APP_PROJECT_NAME,
      // 指定目录以将生成的动态自由嵌套在下
      assetsDir: 'static',
      // 小于此阈值的导入或引用资产将作为base64 URL内联，以避免额外的http请求。设置为0完全禁用内联。
      assetsInlineLimit: 4096,
      // 启用/禁用CSS代码拆分。启用后，在异步块中导入的CSS将内联到异步块本身中，并在加载块时插入。如果禁用，则整个项目中的所有CSS都将提取到一个CSS文件中。
      cssCodeSplit: true,
      // Generate production source maps.生成生产源图。
      sourcemap: false,
      // 设置为时true，构建还将生成一个manifest.json文件，其中包含未哈希静态资源文件名到其哈希版本的映射，然后服务器框架可以使用该文件来呈现正确的静态资源链接。
      manifest: false
    },
    esbuild: {
      drop: VITE_DROP_CONSOLE ? ['console', 'debugger'] : []
    },
    server: {
      port: 8080, //启动端口
      hmr: {
        host: '127.0.0.1',
        port: 8080
      },
      // 设置 https 代理
      proxy: {
        [VITE_APP_BASE_API]: {
          target: VITE_BASE_URL,
          changeOrigin: true,
          rewrite: (path) => path.replace(new RegExp(`^${VITE_APP_BASE_API}`), '')
        }
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@import "@/styles/variables.scss";` // 如果有全局的 SCSS 变量文件，可以在这里引入
        }
      }
    }
  }
})
